﻿using System;

namespace Sandy.Uuids
{
    public static class UuidUtils
    {
        public static Guid FromBytes(byte[] id)
        {
            byte[] flippedId = FlipBytes(id);
            return new Guid(flippedId);
        }

        private static byte[] FlipBytes(byte[] id)
        {
            byte[] flippedId = new byte[16];
            flippedId[0] = id[3];
            flippedId[1] = id[2];
            flippedId[2] = id[1];
            flippedId[3] = id[0];

            flippedId[4] = id[5];
            flippedId[5] = id[4];

            flippedId[6] = id[7];
            flippedId[7] = id[6];

            Buffer.BlockCopy(id, 8, flippedId, 8, 8);

            return flippedId;
        }

        public static byte[] ToBytes(string id)
        {
            return FlipBytes(new Guid(id).ToByteArray());
        }

        public static string TimeUuid(DateTime dt)
        {
            return GuidGenerator.GenerateTimeBasedGuid(dt).ToString("n");
        }
    }
}